﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sispe.Entities;
using Sispe.BussinesLogic;
using Microsoft.Practices.Unity;

namespace Sispe.UI
{
    public partial class FrmTareoBorrador : Form
    {
        [Dependency]
        public ITareoBL tareoBL { get; set; }

        [Dependency]
        public IPersonaBL personaBL { get; set; }

        [Dependency]
        public IContratoBL contratoBL { get; set; }

        public FrmTareoBorrador()
        {
            InitializeComponent();
            this.BuildUp();
        }

        private void FrmTareoBorrador_Load(object sender, EventArgs e)
        {
            CargarDatos();
        }

        private void CargarDatos()
        {
            tAREO_BORRADORBindingSource.DataSource = tareoBL.GetAllFromTareoBorrador();
        }

        private void btnTareo_Click(object sender, EventArgs e)
        {
            var tareosBorrador = tareoBL.GetAllFromTareoBorrador();
            var msg = "ERROR";

            if (tareosBorrador != null)
            {
                foreach (var item in tareosBorrador)
                {
                    bool isBanderaEntradaAM = false;
                    bool isBanderaEntradaPM = false;

                    bool isBanderaSalidaAM = false;
                    bool isBanderaSalidaPM = false;

                    var tareoLimpio = new TAREO();

                    if (!item.Tareo)
                    {
                        if (item.Estado)
                        {
                            var persona = personaBL.GetFromPersonaByDni(item.EnrollNumber);
                            var contrato = contratoBL.GetFromContratosPorVencerByIdTrabajador(persona.IdPersona);
                            //var contrato = contratoBL.GetFromContratoVigenteByTrabajador(persona.IdPersona);

                            if (contrato.PROYECTO.HORARIO_PROYECTO != null)
                            {
                                if (contrato.PROYECTO.HORARIO_PROYECTO.Tipo_Marca == 1)  // Solo entrada
                                {
                                    if (contrato.PROYECTO.HORARIO_PROYECTO.Tipo_Horario == 1) //Horario Corrido
                                    {
                                        #region Horario Corrido - Solo Entrada
                                        if (item.InOutMode == 0)
                                        {
                                            var horaEntradaMañana = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraEntrada).AddMinutes(Convert.ToDouble(contrato.PROYECTO.HORARIO_PROYECTO.MinutosTolerancia));
                                            var horaSalidaMañana = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraSalida);

                                            var listaEntrada = tareoBL.TareoByDni(item);
                                            foreach (var entrada in listaEntrada)
                                            {
                                                var tiempo = entrada.Date.ToShortTimeString();
                                                var hora = Convert.ToDateTime(tiempo);

                                                #region Horario Entrada Mañana
                                                // 7.05 - 18.00
                                                // 7.10 - 18.00
                                                // 8.00 - 18.00
                                                if (hora <= horaEntradaMañana && hora <= horaSalidaMañana) //Horario Entrada en la Mañana
                                                {
                                                    if (!isBanderaEntradaAM)
                                                    {
                                                        item.Date = entrada.Date;
                                                        isBanderaEntradaAM = true;
                                                        entrada.Tareo = true;
                                                        //llamas a update tareo borrador  y le envias entrada                                                            
                                                        tareoBL.UpdateTareoBorrador(entrada);

                                                        // asignas los demas valores de tareo limpio
                                                        tareoLimpio.IdContrato = contrato.IdContrato;
                                                        tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                        tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraSalida);
                                                        tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                        tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                        tareoLimpio.Tardanza = false;
                                                        try
                                                        {
                                                            tareoBL.AddTareo(tareoLimpio);
                                                        }
                                                        catch (Exception ex)
                                                        {
                                                            msg = ex.Message;
                                                            MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        entrada.Tareo = true;
                                                        //llamas a update tareo borrador  y le envias entrada
                                                        tareoBL.UpdateTareoBorrador(entrada);
                                                    }
                                                }
                                                else if (hora >= horaEntradaMañana && hora <= horaSalidaMañana) //Horario Entrada en la Mañana
                                                {
                                                    if (!isBanderaEntradaAM)
                                                    {
                                                        item.Date = entrada.Date;
                                                        isBanderaEntradaAM = true;
                                                        entrada.Tareo = true;
                                                        //llamas a update tareo borrador  y le envias entrada                                                            
                                                        tareoBL.UpdateTareoBorrador(entrada);

                                                        // asignas los demas valores de tareo limpio
                                                        tareoLimpio.IdContrato = contrato.IdContrato;
                                                        tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                        tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraSalida);
                                                        tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                        tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                        tareoLimpio.Tardanza = true;
                                                        //Metodo BL TareoLimpio
                                                        try
                                                        {
                                                            tareoBL.AddTareo(tareoLimpio);
                                                        }
                                                        catch (Exception ex)
                                                        {
                                                            msg = ex.Message;
                                                            MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        entrada.Tareo = true;
                                                        //llamas a update tareo borrador  y le envias entrada
                                                        tareoBL.UpdateTareoBorrador(entrada);
                                                    }
                                                }
                                            }
                                        }
                                                #endregion
                                        #endregion
                                    }
                                    else //Horario Partido
                                    {
                                        #region Horario Partido - Solo Entrada
                                        if (item.InOutMode == 0)
                                        {
                                            var horaEntradaMañana = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraEntrada).AddMinutes(Convert.ToDouble(contrato.PROYECTO.HORARIO_PROYECTO.MinutosTolerancia));
                                            var horaSalidaMañana = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraSalida);
                                            var horaEntradaTarde = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.PM_HoraEntrada).AddMinutes(Convert.ToDouble(contrato.PROYECTO.HORARIO_PROYECTO.MinutosTolerancia));
                                            var horaSalidaTarde = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.PM_HoraSalida);

                                            var listaEntrada = tareoBL.TareoByDni(item);
                                            if (listaEntrada != null)
                                            {
                                                foreach (var entrada in listaEntrada)
                                                {
                                                    var tiempo = entrada.Date.ToShortTimeString();
                                                    var hora = Convert.ToDateTime(tiempo);

                                                    #region Horario Entrada Mañana
                                                    // 7.05 7.10 8.00
                                                    //  (7:05 <= 8:05 || 7:05 >= 8:05) && 7:05 <= 13:00)
                                                    // (8.20 <= 8.05 || 8.20 >= 8.05) && 8.20 <= 13.00)
                                                    if (hora <= horaEntradaMañana && hora <= horaSalidaMañana) //Horario Entrada en la Mañana
                                                    {
                                                        if (!isBanderaEntradaAM)
                                                        {
                                                            item.Date = entrada.Date;
                                                            isBanderaEntradaAM = true;
                                                            entrada.Tareo = true;
                                                            //llamas a update tareo borrador  y le envias entrada                                                            
                                                            tareoBL.UpdateTareoBorrador(entrada);

                                                            // asignas los demas valores de tareo limpio
                                                            tareoLimpio.IdContrato = contrato.IdContrato;
                                                            tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                            tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraSalida);
                                                            tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                            tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                            tareoLimpio.Tardanza = false;
                                                            try
                                                            {
                                                                tareoBL.AddTareo(tareoLimpio);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                msg = ex.Message;
                                                                MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            entrada.Tareo = true;
                                                            //llamas a update tareo borrador  y le envias entrada
                                                            tareoBL.UpdateTareoBorrador(entrada);
                                                        }
                                                    }
                                                    else if (hora >= horaEntradaMañana && hora <= horaSalidaMañana)
                                                    {
                                                        if (!isBanderaEntradaAM)
                                                        {
                                                            item.Date = entrada.Date;
                                                            isBanderaEntradaAM = true;
                                                            entrada.Tareo = true;
                                                            //llamas a update tareo borrador  y le envias entrada                                                            
                                                            tareoBL.UpdateTareoBorrador(entrada);

                                                            // asignas los demas valores de tareo limpio
                                                            tareoLimpio.IdContrato = contrato.IdContrato;
                                                            tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                            tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraSalida);
                                                            tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                            tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                            tareoLimpio.Tardanza = true;
                                                            //Metodo BL TareoLimpio
                                                            try
                                                            {
                                                                tareoBL.AddTareo(tareoLimpio);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                msg = ex.Message;
                                                                MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            entrada.Tareo = true;
                                                            //llamas a update tareo borrador  y le envias entrada
                                                            tareoBL.UpdateTareoBorrador(entrada);
                                                        }
                                                    }
                                                    #endregion

                                                    #region Horario Entrada Tarde
                                                    // 13.05 13.10 14.00
                                                    // (13:05 <= 13:05 || 13:05 >= 13:05) && 13:05 <= 19:00)
                                                    // (14.00 <= 13.05 || 14.00 >= 13.05) && 14.00 <= 19.00)
                                                    if (hora <= horaEntradaTarde && hora >= horaEntradaTarde.AddHours(-1) && hora <= horaSalidaTarde)
                                                    {
                                                        if (!isBanderaEntradaPM)
                                                        {
                                                            item.Date = entrada.Date;
                                                            isBanderaEntradaPM = true;
                                                            entrada.Tareo = true;
                                                            //llamas a update tareo borrador  y le envias entrada                                                            
                                                            tareoBL.UpdateTareoBorrador(entrada);

                                                            // asignas los demas valores de tareo limpio
                                                            tareoLimpio.IdContrato = contrato.IdContrato;
                                                            tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                            tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + contrato.PROYECTO.HORARIO_PROYECTO.PM_HoraSalida);
                                                            tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                            tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                            tareoLimpio.Tardanza = false;
                                                            try
                                                            {
                                                                tareoBL.AddTareo(tareoLimpio);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                msg = ex.Message;
                                                                MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            entrada.Tareo = true;
                                                            //llamas a update tareo borrador  y le envias entrada
                                                            tareoBL.UpdateTareoBorrador(entrada);
                                                        }
                                                    }
                                                    else if (hora >= horaEntradaTarde && hora >= horaEntradaTarde.AddHours(-1) && hora <= horaSalidaTarde)
                                                    {
                                                        if (!isBanderaEntradaPM)
                                                        {
                                                            item.Date = entrada.Date;
                                                            isBanderaEntradaPM = true;
                                                            entrada.Tareo = true;
                                                            //llamas a update tareo borrador  y le envias entrada                                                            
                                                            tareoBL.UpdateTareoBorrador(entrada);

                                                            // asignas los demas valores de tareo limpio
                                                            tareoLimpio.IdContrato = contrato.IdContrato;
                                                            tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                            tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + contrato.PROYECTO.HORARIO_PROYECTO.PM_HoraSalida);
                                                            tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                            tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                            tareoLimpio.Tardanza = true;
                                                            try
                                                            {
                                                                tareoBL.AddTareo(tareoLimpio);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                msg = ex.Message;
                                                                MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            entrada.Tareo = true;
                                                            //llamas a update tareo borrador  y le envias entrada
                                                            tareoBL.UpdateTareoBorrador(entrada);
                                                        }
                                                    }
                                                    #endregion
                                                }
                                            }

                                        }
                                        #endregion

                                        else if (item.InOutMode == 1)
                                        {
                                            item.Tareo = true;
                                            //Actualizamos el Tareo Borrador
                                            tareoBL.UpdateTareoBorrador(item);
                                        }
                                    }
                                }
                                #region Entrada y Salida
                                else if (contrato.PROYECTO.HORARIO_PROYECTO.Tipo_Marca == 2) // Entrada y salida
                                {
                                    #region Horario Corrido
                                    if (contrato.PROYECTO.HORARIO_PROYECTO.Tipo_Horario == 1) //Horario Corrido
                                    {
                                        var listaTareos = tareoBL.ListaTareo(item);

                                        if (listaTareos != null)
                                        {
                                            bool traeent = false;
                                            bool trasal = false;

                                            var horaEntradaMañana = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraEntrada).AddMinutes(Convert.ToDouble(contrato.PROYECTO.HORARIO_PROYECTO.MinutosTolerancia));
                                            var horaSalidaMañana = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraSalida);
                                            //var horaEntradaTarde = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.PM_HoraEntrada).AddMinutes(Convert.ToDouble(contrato.PROYECTO.HORARIO_PROYECTO.MinutosTolerancia));
                                            //var horaSalidaTarde = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.PM_HoraSalida);

                                            foreach (var entraSali in listaTareos)
                                            {
                                                if (entraSali.InOutMode == 0)
                                                {
                                                    traeent = true;
                                                }
                                                else
                                                {
                                                    trasal = true;
                                                }
                                            }

                                            foreach (var entrada in listaTareos)
                                            {
                                                var tiempo = entrada.Date.ToShortTimeString();
                                                var hora = Convert.ToDateTime(tiempo);

                                                if (traeent && trasal)
                                                {
                                                    //tengo horario entrada salida
                                                    if (hora <= horaEntradaMañana && hora <= horaSalidaMañana)
                                                    {
                                                        if (!isBanderaEntradaAM)
                                                        {
                                                            isBanderaEntradaAM = true;
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);

                                                            //Asignamos tareo a Limpio
                                                            tareoLimpio.IdContrato = contrato.IdContrato;
                                                            tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                            tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + horaSalidaMañana.ToShortTimeString());
                                                            tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                            tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                            tareoLimpio.Tardanza = false;

                                                            try
                                                            {
                                                                tareoBL.AddTareo(tareoLimpio);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                msg = ex.Message;
                                                                MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);
                                                        }
                                                    }
                                                    else if (hora >= horaEntradaMañana && hora <= horaSalidaMañana)
                                                    {
                                                        if (!isBanderaEntradaAM)
                                                        {
                                                            isBanderaEntradaAM = true;
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);

                                                            //Asignamos tareo a Limpio
                                                            tareoLimpio.IdContrato = contrato.IdContrato;
                                                            tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                            tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + horaSalidaMañana.ToShortTimeString());
                                                            tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                            tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                            tareoLimpio.Tardanza = true;

                                                            try
                                                            {
                                                                tareoBL.AddTareo(tareoLimpio);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                msg = ex.Message;
                                                                MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);
                                                        }
                                                    }
                                                }
                                                else if (traeent && !trasal)
                                                {
                                                    //tengo solo Entradas
                                                    if (hora <= horaEntradaMañana && hora <= horaSalidaMañana)
                                                    {
                                                        if (!isBanderaEntradaAM)
                                                        {
                                                            isBanderaEntradaAM = true;
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);

                                                            //Asignamos tareo a Limpio
                                                            tareoLimpio.IdContrato = contrato.IdContrato;
                                                            tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                            tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.AddMinutes(1).ToShortTimeString());
                                                            tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                            tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                            tareoLimpio.Tardanza = false;

                                                            try
                                                            {
                                                                tareoBL.AddTareo(tareoLimpio);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                msg = ex.Message;
                                                                MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);
                                                        }
                                                    }
                                                    else if (hora >= horaEntradaMañana && hora <= horaSalidaMañana)
                                                    {
                                                        if (!isBanderaEntradaAM)
                                                        {
                                                            isBanderaEntradaAM = true;
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);

                                                            //Asignamos tareo a Limpio
                                                            tareoLimpio.IdContrato = contrato.IdContrato;
                                                            tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                            tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.AddMinutes(1).ToShortTimeString());
                                                            tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                            tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                            tareoLimpio.Tardanza = true;

                                                            try
                                                            {
                                                                tareoBL.AddTareo(tareoLimpio);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                msg = ex.Message;
                                                                MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);
                                                        }
                                                    }
                                                }
                                                else if (!traeent && trasal)
                                                {
                                                    //tengo solo salidas
                                                    if (hora <= horaEntradaMañana && hora >= horaSalidaMañana) // Revisar horario salida
                                                    {
                                                        if (!isBanderaEntradaAM)
                                                        {
                                                            isBanderaEntradaAM = true;
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);

                                                            //Asignamos tareo a Limpio
                                                            tareoLimpio.IdContrato = contrato.IdContrato;
                                                            tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.AddMinutes(-1).ToShortTimeString());
                                                            tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                            tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                            tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                            tareoLimpio.Tardanza = false;

                                                            try
                                                            {
                                                                tareoBL.AddTareo(tareoLimpio);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                msg = ex.Message;
                                                                MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);
                                                        }
                                                    }
                                                    else if (hora >= horaEntradaMañana && hora >= horaSalidaMañana) // Revisar horario salida
                                                    {
                                                        if (!isBanderaEntradaAM)
                                                        {
                                                            isBanderaEntradaAM = true;
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);

                                                            //Asignamos tareo a Limpio
                                                            tareoLimpio.IdContrato = contrato.IdContrato;
                                                            tareoLimpio.FechaEntrada = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.AddMinutes(-1).ToShortTimeString());
                                                            tareoLimpio.FechaSalida = Convert.ToDateTime(entrada.Date.ToShortDateString() + " " + hora.ToShortTimeString());
                                                            tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                            tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                            tareoLimpio.Tardanza = true;

                                                            try
                                                            {
                                                                tareoBL.AddTareo(tareoLimpio);
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                msg = ex.Message;
                                                                MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            entrada.Tareo = true;
                                                            tareoBL.UpdateTareoBorrador(entrada);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    #endregion

                                    else //Horario Partido
                                    {
                                        var listaTareos = tareoBL.ListaTareo(item);

                                        if (listaTareos != null)
                                        {
                                            bool traeent = false;
                                            bool traeentPM = false;
                                            bool trasal = false;
                                            bool trasalPM = false;
                                            DateTime entradaTrabajador = DateTime.MinValue;
                                            DateTime salidaTrabajador = DateTime.MinValue;
                                            DateTime entradaTrabajadorPM = DateTime.MinValue;
                                            DateTime salidaTrabajadorPM = DateTime.MinValue;

                                            var horaEntradaMañana = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraEntrada).AddMinutes(Convert.ToDouble(contrato.PROYECTO.HORARIO_PROYECTO.MinutosTolerancia));
                                            var horaSalidaMañana = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.AM_HoraSalida);
                                            var horaEntradaTarde = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.PM_HoraEntrada).AddMinutes(Convert.ToDouble(contrato.PROYECTO.HORARIO_PROYECTO.MinutosTolerancia));
                                            var horaSalidaTarde = Convert.ToDateTime(contrato.PROYECTO.HORARIO_PROYECTO.PM_HoraSalida);

                                            foreach (var entraSali in listaTareos)
                                            {
                                                var hora = Convert.ToDateTime(entraSali.Date.ToShortTimeString());

                                                if (entraSali.InOutMode == 0)
                                                {
                                                    //entradas mañana
                                                    if (!traeent && hora <= horaSalidaMañana)
                                                    {
                                                        traeent = true;
                                                        entradaTrabajador = entraSali.Date;
                                                    }
                                                    else if (!traeentPM && hora >= horaSalidaMañana && hora <= horaSalidaTarde) //entrada tarde
                                                    {
                                                        traeentPM = true;
                                                        entradaTrabajadorPM = entraSali.Date;
                                                    }
                                                }
                                                else if (entraSali.InOutMode == 1)
                                                {
                                                    //salida mañana
                                                    if (!trasal && hora >= horaEntradaMañana && hora <= horaEntradaTarde)
                                                    {
                                                        trasal = true;
                                                        salidaTrabajador = entraSali.Date;
                                                    }
                                                    else if (!trasalPM && hora >= horaEntradaTarde) //entrada tarde
                                                    {
                                                        trasalPM = true;
                                                        salidaTrabajadorPM = entraSali.Date;
                                                    }
                                                }

                                                //update Tareo Borrado
                                                entraSali.Tareo = true;
                                                tareoBL.UpdateTareoBorrador(entraSali);

                                            }

                                            for (int l = 0; l < 1; l++)
                                            {
                                                if (traeent && trasal) //entrada y salida mañana
                                                {
                                                    //Asignamos tareo a Limpio
                                                    tareoLimpio.IdContrato = contrato.IdContrato;
                                                    tareoLimpio.FechaEntrada = entradaTrabajador;
                                                    tareoLimpio.FechaSalida = salidaTrabajador;
                                                    tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                    tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                    if (entradaTrabajador > Convert.ToDateTime(entradaTrabajador.Date.ToShortDateString() + " " + horaEntradaMañana.ToShortTimeString()))
                                                    {
                                                        tareoLimpio.Tardanza = false;
                                                    }
                                                    else
                                                    {
                                                        tareoLimpio.Tardanza = true;
                                                    }


                                                    try
                                                    {
                                                        tareoBL.AddTareo(tareoLimpio);
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        msg = ex.Message;
                                                        MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                    }
                                                }
                                                else if (!traeent && trasal)
                                                {
                                                    //Asignamos tareo a Limpio
                                                    tareoLimpio.IdContrato = contrato.IdContrato;
                                                    tareoLimpio.FechaEntrada = salidaTrabajador.AddMinutes(-1);
                                                    tareoLimpio.FechaSalida = salidaTrabajador;
                                                    tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                    tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                    if (entradaTrabajador > Convert.ToDateTime(entradaTrabajador.Date.ToShortDateString() + " " + horaEntradaMañana.ToShortTimeString()))
                                                    {
                                                        tareoLimpio.Tardanza = false;
                                                    }
                                                    else
                                                    {
                                                        tareoLimpio.Tardanza = true;
                                                    }


                                                    try
                                                    {
                                                        tareoBL.AddTareo(tareoLimpio);
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        msg = ex.Message;
                                                        MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                    }
                                                }
                                                else if (traeent && !trasal)
                                                {
                                                    //Asignamos tareo a Limpio
                                                    tareoLimpio.IdContrato = contrato.IdContrato;
                                                    tareoLimpio.FechaEntrada = entradaTrabajador;
                                                    tareoLimpio.FechaSalida = entradaTrabajador.AddMinutes(1);
                                                    tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                    tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                    if (entradaTrabajador > Convert.ToDateTime(entradaTrabajador.Date.ToShortDateString() + " " + horaEntradaMañana.ToShortTimeString()))
                                                    {
                                                        tareoLimpio.Tardanza = false;
                                                    }
                                                    else
                                                    {
                                                        tareoLimpio.Tardanza = true;
                                                    }


                                                    try
                                                    {
                                                        tareoBL.AddTareo(tareoLimpio);
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        msg = ex.Message;
                                                        MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                    }
                                                }
                                            }

                                            for (int i = 0; i < 1; i++)
                                            {
                                                if (traeentPM && trasalPM)
                                                {
                                                    //Asignamos tareo a Limpio
                                                    tareoLimpio.IdContrato = contrato.IdContrato;
                                                    tareoLimpio.FechaEntrada = entradaTrabajadorPM;
                                                    tareoLimpio.FechaSalida = salidaTrabajadorPM;
                                                    tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                    tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                    if (entradaTrabajadorPM > Convert.ToDateTime(entradaTrabajador.Date.ToShortDateString() + " " + horaEntradaTarde.ToShortTimeString()))
                                                    {
                                                        tareoLimpio.Tardanza = false;
                                                    }
                                                    else
                                                    {
                                                        tareoLimpio.Tardanza = true;
                                                    }


                                                    try
                                                    {
                                                        tareoBL.AddTareo(tareoLimpio);
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        msg = ex.Message;
                                                        MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                    }
                                                }
                                                else if (!traeentPM && trasalPM)
                                                {
                                                    //Asignamos tareo a Limpio
                                                    tareoLimpio.IdContrato = contrato.IdContrato;
                                                    tareoLimpio.FechaEntrada = salidaTrabajadorPM.AddMinutes(-1);
                                                    tareoLimpio.FechaSalida = salidaTrabajadorPM;
                                                    tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                    tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                    if (entradaTrabajadorPM > Convert.ToDateTime(entradaTrabajador.Date.ToShortDateString() + " " + horaEntradaTarde.ToShortTimeString()))
                                                    {
                                                        tareoLimpio.Tardanza = false;
                                                    }
                                                    else
                                                    {
                                                        tareoLimpio.Tardanza = true;
                                                    }


                                                    try
                                                    {
                                                        tareoBL.AddTareo(tareoLimpio);
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        msg = ex.Message;
                                                        MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                    }
                                                }
                                                else if (traeentPM && !trasalPM)
                                                {
                                                    //Asignamos tareo a Limpio
                                                    tareoLimpio.IdContrato = contrato.IdContrato;
                                                    tareoLimpio.FechaEntrada = entradaTrabajadorPM;
                                                    tareoLimpio.FechaSalida = entradaTrabajadorPM.AddMinutes(1);
                                                    tareoLimpio.HorasTrabajadas = (tareoLimpio.FechaSalida - tareoLimpio.FechaEntrada);
                                                    tareoLimpio.Tipo_Autenticacion = item.VerifyMode == 1 ? "HUELLA DIGITAL" : item.VerifyMode == 2 ? "PASSWORD" : "TARJETA DE ACCESO";
                                                    if (entradaTrabajadorPM > Convert.ToDateTime(entradaTrabajador.Date.ToShortDateString() + " " + horaEntradaTarde.ToShortTimeString()))
                                                    {
                                                        tareoLimpio.Tardanza = false;
                                                    }
                                                    else
                                                    {
                                                        tareoLimpio.Tardanza = true;
                                                    }


                                                    try
                                                    {
                                                        tareoBL.AddTareo(tareoLimpio);
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        msg = ex.Message;
                                                        MessageBox.Show(msg, "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                    }
                                                }
                                            }


                                        }
                                    }
                                }
                                #endregion
                            }
                            else
                            {
                                MessageBox.Show("Aún no se ha asignado un horario de proyecto.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                        }
                    }
                }
                MessageBox.Show("Regristro Correcto", "OK!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void BuscarTareoPorDNI()
        {
            tAREO_BORRADORBindingSource.DataSource = tareoBL.GetAllFromTareoBorradorByDni(txtDescripcion.Text.ToUpper());
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            BuscarTareoPorDNI();
        }

        private void txtDescripcion_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                BuscarTareoPorDNI();
            }
        }

        private void btnEditarDNI_Click(object sender, EventArgs e)
        {
            var _current = tAREO_BORRADORBindingSource.Current as TAREO_BORRADOR;

            if (_current != null)
            {
                var editar = new FrmInputTareoBorrador();
                editar.idTareo = _current.Id;
                editar.dni = _current.EnrollNumber;
                editar.Editar();
                editar.ShowDialog();
                CargarDatos();
                ActualizarTareoBorrador();
            }
        }

        private void btnRefresh_Click(object sender, EventArgs e)
        {
            ActualizarTareoBorrador();
            CargarDatos();
        }

        private void ActualizarTareoBorrador()
        {
            var tareosBorrador = tareoBL.GetAllFromTareoBorrador();
            var msg = "ERROR";

            if (tareosBorrador != null)
            {
                foreach (var item in tareosBorrador)
                {
                    var persona = personaBL.GetFromPersonaByDni(item.EnrollNumber);

                    if (persona != null)
                    {
                        item.Existe = true;

                        //Ahora vemos si la persona en si tiene un contrato vigente.
                        //var contrato = contratoBL.GetFromContratoVigenteByTrabajador(persona.IdPersona);
                        var contrato = contratoBL.GetFromContratosPorVencerByIdTrabajador(persona.IdPersona);

                        if (contrato != null)
                        {
                            item.Contrato = true;
                            item.Estado = true;
                        }
                        else
                        {
                            item.Contrato = false;
                            item.Estado = false;
                        }

                    }
                    else
                    {
                        item.Existe = false;
                        item.Contrato = false;
                        item.Estado = false;
                        item.Tareo = false;
                    }

                    tareoBL.UpdateTareoBorrador(item);
                }
            }
        }

        private void btnLimpiarTareo_Click(object sender, EventArgs e)
        {
            var tareosBorrador = tareoBL.GetAllFromTareoBorrador();
            var msg = "ERROR";

            if (tareosBorrador != null)
            {
                foreach (var item in tareosBorrador)
                {
                    if (item.Tareo)
                    {
                        tareoBL.DeleteTareoBorrador(item.Id);
                    }
                }
            }

            MessageBox.Show("Limpiado Correcto", "OK!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            tAREO_BORRADORBindingSource.DataSource = tareoBL.GetAllFromTareoBorrador();
        }
    }
}
